"""
Elio框架的示例程序。
"""
from elio import core, application
from layers import HomeLayer

core.cors_proxy_serve('/cors')


@core.session_received
class MainActivity(core.Activity):
    """
    演示使用elio的各种组件。
    activity组件是最顶级组件，可以包含多个layer。
    activity内部维护了一个layer的栈，只有把某个layer放在栈顶才有机会接收到activity的生命周期事件。
    使用layer机制可以维护多个不同页面的逻辑，让每一个页面分离，并让每一个页面具有独立的生命周期。
    例如当我们把layer1置于栈顶，并且activity的状态在前台运行，则layer1能接受到onShow事件，当有新的layer2覆盖时，layer1能接受到onHide事件，这意味着我们可以在这两个生命周期函数中进行UI小部件的创建与销毁。
    """
    lHome: HomeLayer = None

    async def on_create(self, *args, **kwargs):
        await super().on_create(*args, **kwargs)
        # 创建首页UI层
        self.lHome = await HomeLayer.create(self)
        # 把首页UI层压入栈顶，这意味着lHome的onShow方法即将被调用
        await self.push_layer(self.lHome)

    async def on_destroy(self):
        # elio框架对layer对象的生命周期没有管理，每一个layer层对象需要自己决定核实销毁
        if self.lHome:
            await self.lHome.destroy()
        await super().on_destroy()

    async def on_stop(self):
        await super().on_stop()

    async def on_start(self):
        await super().on_start()

    async def on_pause(self):
        await super().on_pause()

    async def on_resume(self):
        await super().on_resume()


if __name__ == '__main__':
    loop = core.get_event_loop()
    app = application.ElioApplication('Elio框架示例程序', './', True)
    loop.run_until_complete(app.run())
    loop.close()
